package Test;

import java.util.ArrayList;
import java.util.List;

/**
 *  多线程通信 ---- 生产者、消费者、仓库
 */

public class connection {

    public static void main(String[] args) {



        Long begin = System.currentTimeMillis(); // 获取当前时间，用其进行循环
        /**
         * 使用集合来存储商品，每当存储一个商品就会消费一个商品，所以集合的总长度始终为1
         */

//        // 创建仓库
//        List<Object> goods = new ArrayList<>();
        // 生产者线程
//        Thread creator = new Thread(new Runnable() {
//            @Override
//            public void run() {
//                 int num = 0;
//                 while (System.currentTimeMillis()-begin<=100){
//                     synchronized (goods){
//                         if (goods.size()>0){
//                             try {
//                                 goods.wait();
//                             } catch (InterruptedException e) {
//                                 e.printStackTrace();
//                             }
//                         }else {
//                             goods.add("商品" + num++);
//                             System.out.println("生产了商品" + num);
//                         }
//                     }
//                 }
//            }
//        },"生产者");
//        // 消费者线程
//        Thread customer = new Thread(new Runnable() {
//            @Override
//            public void run() {
//                int num=0;
//                while (System.currentTimeMillis()-begin<=100){
//                    synchronized (goods){
//                        if (goods.size()<=0){
//                            goods.notify();
//                        }else{
//                            goods.remove("商品"+num++);
//                            System.out.println("消费了商品"+num);
//                        }
//                    }
//                }
//            }
//        },"消费者");
//        // 启动线程
//        creator.start();
//        customer.start();

        /**
         * 存放生产的产品，与消费者的需求进行比对
         */

        List<Object> goods = new ArrayList<>();
        Thread creator = new Thread(new Runnable() {
            @Override
            public void run() {
                 int num = 0;
                 while (System.currentTimeMillis()-begin<=50){
                     synchronized (goods){
                         int a = goods.size();
                         //System.out.println(goods.size());
                         if (a >= 100 ) {
                             try {
                                 goods.wait();
                             } catch (InterruptedException e) {
                                 e.printStackTrace();
                             }
                         }
                         goods.add("商品" + num);
                         System.out.println("生产了商品" + num);
                         num++;
                         //System.out.println(goods);
                     }
                 }
            }
        });
        Thread customer = new Thread(new Runnable() {
            @Override
            public void run() {
                int num = 0;
                while (System.currentTimeMillis()-begin<=50){
                    synchronized (goods){
                        if (goods.size()<=0) {
                            goods.notify();
                        }
                        for (int i=0;i<goods.size();i++){
                            if (goods.get(i).equals("商品"+num)){
                                goods.remove("商品" + num);
                                System.out.println("消费了商品" + num+",还剩"+(goods.size())+"件商品");
                                num++;
                            }else{
                                goods.notify();
                            }
                        }
                    }
                }
            }
        });
        creator.start();
        customer.start();
    }

}
